package com.foundryx.shared.exception;

/**
 * @className: BusinessException
 * @author: ocxz1
 * @date: 2025/6/20 上午10:28
 * @Version: 1.0
 * @description: fx-share-resources 业务异常：用于抛出用户操作相关的错误
 */
public final class BusinessException extends BaseException implements HasErrorCode {

    private final static int DEFAULT_ERROR_CODE = 500;
    private final static String DEFAULT_MESSAGE = "未知错误，请联系管理员";

    /**
     * 构造一个带异常原因的业务异常。
     * @param msgCode i18n 消息码
     * @param cause   异常原因
     * @param args    消息参数
     */

    public BusinessException(String msgCode, Throwable cause, Object... args) {
        this(DEFAULT_ERROR_CODE, msgCode, cause, args);
    }

    /**
     * 构造一个指定错误码的业务异常。
     *
     * @param errorCode 自定义 HTTP 状态码
     * @param msgCode   i18n 消息码
     * @param cause     异常原因
     * @param args      消息参数
     */
    public BusinessException(int errorCode, String msgCode, Throwable cause, Object... args) {
        super(errorCode, msgCode, resolveMessage(msgCode, DEFAULT_MESSAGE, args), cause, args);
    }

    /**
     * 构造一个业务异常。
     * @param msgCode i18n 消息码
     * @param args 消息参数（如 {0}, {1}）
     */
    public BusinessException(String msgCode, Object... args) {
        this(msgCode, null, args);
    }

    @Override
    public String getDefaultMessage() {
        return DEFAULT_MESSAGE;
    }
}
